//
//  ViewController.m
//  PhtreadDemo
//
//  Created by 方正刚 on 2017/7/19.
//  Copyright © 2017年 方正刚. All rights reserved.
//

#import "ViewController.h"
#import <pthread/pthread.h>


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    }

// 开始点击时创建线程
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    // 学习新函数或方法的三要素
    // 1 函数功能
    // 2 函数的参数
    // 3 函数的返回值
    
    /**
     方法功能: 使用pthread创建线程的方法
     
     参数1:  线程的地址编号
     参数2:  线程的属性
     参数3:  " void * (*) (void *) " 线程要执行的函数
     参数4:   要执行的函数的参数
     
     返回值:  返回int类型 0表示成功 非零表示失败
     */
    
    // 线程创建者的名字
    NSString *createrName = @"creater";
    
    pthread_t pthread; //线程编号
    
    int result = pthread_create(&pthread, NULL, testpthread, (__bridge void *)(createrName));
    
    // <NSThread: 0x608000073000>{number = 1, name = main} 主线程也叫UI线程
    NSLog(@"当前的线程 -- %@", [NSThread currentThread]);

    
    if (result == 0) {
        NSLog(@"成功");
    }else {
        NSLog(@"失败");
    }
    /*
     注意事项:
     1、函数名就是函数地址
     2、nil 是空对象 NULL是空指针
     3、void * 指向任何类型的指针 有点类似OC中的id;
     4、把OC对象传给c语言函数要桥接(__brige) 反之同理
     */

}

void *testpthread(void *params) {
    
    NSString *createrName = (__bridge NSString *)(params);
    
    // <NSThread: 0x60800007e4c0>{number = 3, name = (null)} 先创建的是子线程
    NSLog(@"线程创建者--%@ 当前的线程 -- %@", createrName, [NSThread currentThread]);
    return NULL;
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end
